package com.itheima.dao;

import com.itheima.entity.PageResult;
import com.itheima.entity.QueryPageBean;
import com.itheima.pojo.Physical;
import com.itheima.pojo.Role;
import com.itheima.pojo.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author 吴
 * @version V1.0
 * @Description 用户
 * @Package com.itheima.dao
 * @date 2021/11/28 14:41
 */
public interface UserDao {

    /**
     * 通过用户名查询信息
     * @param username  用户名
     * @return
     */
    User findByUsername(String username);
    /**
     * @Description:  根据条件查询（分页查询）
     * @Param:  queryString 查询条件
     * @return:
     * @Author: 文攀
     * @Date: 2021/12/8
     */
    List<User> selectByCondition(String queryString);

    /**
     * @Description:  查询所有角色
     * @Param:
     * @return:
     * @Author: 文攀
     * @Date: 2021/12/8
     */
    List<Role> findRoles();

     /**
         * @Description:  添加用户
         * @Param:
         * @return:
         * @Author: 文攀
         * @Date: 2021/12/8
         */
    void add(User user);

        /**
            * @Description:  添加用户与角色的关系
            * @Param:  id（用户id），roles(角色)
            * @return:
            * @Author: 文攀
            * @Date: 2021/12/8
            */
    void setUserAndRoles(@Param("userId") Integer userId, @Param("rolesId") Integer[] roleId);

    /**
     * @Description: 根据用户id查询用户信息
     * @Param: id（用户id）
     * @return:
     * @Author: 文攀
     * @Date: 2021/12/8
     */
    User findById(Integer userId);

    /**
     * @Description: 根据用户id查询用户所有的角色
     * @Param:
     * @return:
     * @Author: 文攀
     * @Date: 2021/12/8
     */
    Integer[] findRolesByUserId(Integer userId);
    /**
        * @Description:  修改用户信息
        * @Param:
        * @return:
        * @Author: 文攀
        * @Date: 2021/12/8
        */
    void update(User user);
        /**
            * @Description: 删除原有的用户跟角色关系
            * @Param:
            * @return:
            * @Author: 文攀
            * @Date: 2021/12/8
            */
    void deleteRoleUserByUserId(Integer id);

    /**
     * 根据用户id删除用户
     * @param userId
     */
    void deleteById(Integer userId);

    /**
     * 分页查找所有体质项（中医体质辨识）
     * @param
     * @return
     */
    List<Physical> findPhysical();
}
